/* This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package Controlador;

import java.util.Iterator;
import java.util.Vector;

import Modelo.*;

/**
 * Clase que representa un objeto del tipo accionador. Contendra acciones y podra ejecutarlas secuencialmente
 * @author Armando Machuca Llorente
 */
public class Accionador {

	
    /**
     * Vector de acciones que representa las acciones que seran ejecutadas
     */
	public Vector _acciones;
	private String _unidad;
	
    /**
     * Constructor de la clase Accionador
     */
	public Accionador(){
		_acciones= new Vector();
	}
    /**
     * Constructor de la clase Accionador en la que se especifica un conjunto de acciones a ejecutar
     * @param acciones Conjunto de acciones especificadas
     */
	public Accionador(Vector acciones){
		_acciones=acciones;
	}
	
    /**
     * Metodo que separa las acciones en tres grupos dependiendo sus necesidades de procesamiento
     */
	public void categorizar(){
		//Metodo encargado de reestructurar el conjunto de las acciones. Para las busquedas de varios tipos de imagen
		Iterator i = _acciones.iterator();
		Vector temporal=new Vector();
		AccionProgramaExterno ac=new AccionProgramaExterno();
		AccionBuscarInfOculta ainf=new AccionBuscarInfOculta();
		boolean accion_multiple= false;
		while (i.hasNext()){
			Accion t=(Accion)i.next();
			if(t.getParametro("tipo").getValue().compareTo("bimg_encrp")==0){
			
				ainf.addParametro(new Parametro(t.getParametro("tipo_img").getValue(),"true"));//Anades ese parametro a la busqueda de encriptados temporal
	
				accion_multiple=true;
			}else{
				temporal.add(t);
			}
		}
		if(accion_multiple){
			ainf._explicacionAccion="Busca imagenes encriptadas";
		
			temporal.add(ainf);	
		}
		_acciones=temporal;	
	}
	
    /**
     * metodo que se encarga de introducir una nueva Accion al vector de acciones
     * @param ac Accion que anade
     */
	public void addAccion(Accion ac){
		_acciones.add(ac);
	}
	
	//Ejecuta todas las acciones
    /**
     * Metodo que ejecuta todas las acciones del vector
     */
	public void ejecutar(){	
		Iterator i = _acciones.iterator();
		while (i.hasNext()){
			Accion t=(Accion)i.next();
			//t.printParams();		
			t.ejecutar();
		}
	}
	
}
